/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cr.ac.una.sive.entidad;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collection;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author claribel
 */
@Entity
@Table(name = "USUARIO", catalog = "", schema = "UNA_SIVE")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u"),
    @NamedQuery(name = "Usuario.findByIdUsuario", query = "SELECT u FROM Usuario u WHERE u.idUsuario = :idUsuario"),
    @NamedQuery(name = "Usuario.findByNombre1", query = "SELECT u FROM Usuario u WHERE u.nombre1 = :nombre1"),
    @NamedQuery(name = "Usuario.findByTelefono1", query = "SELECT u FROM Usuario u WHERE u.telefono1 = :telefono1"),
    @NamedQuery(name = "Usuario.findByTelefono2", query = "SELECT u FROM Usuario u WHERE u.telefono2 = :telefono2"),
    @NamedQuery(name = "Usuario.findByCorreoElectronico", query = "SELECT u FROM Usuario u WHERE u.correoElectronico = :correoElectronico"),
    @NamedQuery(name = "Usuario.findBySexo", query = "SELECT u FROM Usuario u WHERE u.sexo = :sexo"),
    @NamedQuery(name = "Usuario.findByCantidadMarchamo", query = "SELECT u FROM Usuario u WHERE u.cantidadMarchamo = :cantidadMarchamo"),
    @NamedQuery(name = "Usuario.findByNombre2", query = "SELECT u FROM Usuario u WHERE u.nombre2 = :nombre2"),
    @NamedQuery(name = "Usuario.findByApellido1", query = "SELECT u FROM Usuario u WHERE u.apellido1 = :apellido1"),
    @NamedQuery(name = "Usuario.findByApellido2", query = "SELECT u FROM Usuario u WHERE u.apellido2 = :apellido2"),
    @NamedQuery(name = "Usuario.findByEstadoCivil", query = "SELECT u FROM Usuario u WHERE u.estadoCivil = :estadoCivil"),
    @NamedQuery(name = "Usuario.findByCedula", query = "SELECT u FROM Usuario u WHERE u.cedula = :cedula")})
public class Usuario implements Serializable {
    private static final long serialVersionUID = 1L;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @Basic(optional = false)
//    @NotNull
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "SQUSUARIO")
    @SequenceGenerator(name="SQUSUARIO", sequenceName = "SQ_USUARIO",allocationSize=1)
    @Column(name = "ID_USUARIO", nullable = false, precision = 0, scale = -127)
    private BigDecimal idUsuario;
    @Size(max = 100)
    @Column(name = "NOMBRE1", length = 100)
    private String nombre1;
    @Column(name = "TELEFONO_1")
    private BigInteger telefono1;
    @Column(name = "TELEFONO_2")
    private BigInteger telefono2;
    @Size(max = 100)
    @Column(name = "CORREO_ELECTRONICO", length = 100)
    private String correoElectronico;
    @Column(name = "SEXO")
    private Character sexo;
    @Column(name = "CANTIDAD_MARCHAMO")
    private BigInteger cantidadMarchamo;
    @Size(max = 100)
    @Column(name = "NOMBRE2", length = 100)
    private String nombre2;
    @Size(max = 100)
    @Column(name = "APELLIDO1", length = 100)
    private String apellido1;
    @Size(max = 100)
    @Column(name = "APELLIDO2", length = 100)
    private String apellido2;
    @Size(max = 100)
    @Column(name = "ESTADO_CIVIL", length = 100)
    private String estadoCivil;
    @Size(max = 100)
    @Column(name = "CEDULA", length = 100)
    private String cedula;
    @OneToMany(mappedBy = "usuario", fetch = FetchType.EAGER)
    private Collection<RegistroHorario> registroHorarioCollection;
    @JoinColumn(name = "CENTRO_TRABAJO_ESCUELA", referencedColumnName = "ID_CENTRO_TRABAJO_ESCUELA")
    @ManyToOne(optional=false)
    private CentroTrabajoEscuela centroTrabajoEscuela;
    @OneToMany(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
    private Collection<Marchamo> marchamoCollection;

    public Usuario() {
    }

    public Usuario(BigDecimal idUsuario) {
        this.idUsuario = idUsuario;
    }

    public BigDecimal getIdUsuario() {
        return idUsuario;
    }

    public void setIdUsuario(BigDecimal idUsuario) {
        this.idUsuario = idUsuario;
    }

    public String getNombre1() {
        return nombre1;
    }

    public void setNombre1(String nombre1) {
        this.nombre1 = nombre1;
    }

    public BigInteger getTelefono1() {
        return telefono1;
    }

    public void setTelefono1(BigInteger telefono1) {
        this.telefono1 = telefono1;
    }

    public BigInteger getTelefono2() {
        return telefono2;
    }

    public void setTelefono2(BigInteger telefono2) {
        this.telefono2 = telefono2;
    }

    public String getCorreoElectronico() {
        return correoElectronico;
    }

    public void setCorreoElectronico(String correoElectronico) {
        this.correoElectronico = correoElectronico;
    }

    public Character getSexo() {
        return sexo;
    }

    public void setSexo(Character sexo) {
        this.sexo = sexo;
    }

    public BigInteger getCantidadMarchamo() {
        return cantidadMarchamo;
    }

    public void setCantidadMarchamo(BigInteger cantidadMarchamo) {
        this.cantidadMarchamo = cantidadMarchamo;
    }

    public String getNombre2() {
        return nombre2;
    }

    public void setNombre2(String nombre2) {
        this.nombre2 = nombre2;
    }

    public String getApellido1() {
        return apellido1;
    }

    public void setApellido1(String apellido1) {
        this.apellido1 = apellido1;
    }

    public String getApellido2() {
        return apellido2;
    }

    public void setApellido2(String apellido2) {
        this.apellido2 = apellido2;
    }

    public String getEstadoCivil() {
        return estadoCivil;
    }

    public void setEstadoCivil(String estadoCivil) {
        this.estadoCivil = estadoCivil;
    }

    public String getCedula() {
        return cedula;
    }

    public void setCedula(String cedula) {
        this.cedula = cedula;
    }

    @XmlTransient
    public Collection<RegistroHorario> getRegistroHorarioCollection() {
        return registroHorarioCollection;
    }

    public void setRegistroHorarioCollection(Collection<RegistroHorario> registroHorarioCollection) {
        this.registroHorarioCollection = registroHorarioCollection;
    }

    public CentroTrabajoEscuela getCentroTrabajoEscuela() {
        return centroTrabajoEscuela;
    }

    public void setCentroTrabajoEscuela(CentroTrabajoEscuela centroTrabajoEscuela) {
        this.centroTrabajoEscuela = centroTrabajoEscuela;
    }

    @XmlTransient
    public Collection<Marchamo> getMarchamoCollection() {
        return marchamoCollection;
    }

    public void setMarchamoCollection(Collection<Marchamo> marchamoCollection) {
        this.marchamoCollection = marchamoCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idUsuario != null ? idUsuario.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.idUsuario == null && other.idUsuario != null) || (this.idUsuario != null && !this.idUsuario.equals(other.idUsuario))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "cr.ac.una.sive.entidad.Usuario[ idUsuario=" + idUsuario + " ]";
    }
    
}
